Jepsen analyses the safety properties of distributed systems–most notably, identifying violations of consistency models. But what are consistency models? What phenomena do they allow? What kind of consistency does a given program really need?
In this reference guide, we provide basic definitions, intuitive explanations, and theoretical underpinnings of various consistency models, as well as links to the literature. We aim to make consistency properties accessible for industry practitioners, academics, and enthusiasts.
Models
A consistency model is a safety property which declares what a system can do. Formally, a consistency model defines a set of histories that a system can legally execute. For instance, the model known as Serializability guarantees that every legal history must be equivalent to a totally ordered execution.
Phenomena
Consistency models are often defined in terms of proscribed phenomena: specific patterns of operations. For example, G1a (Aborted Read) occurs when a transaction observes a write performed by a different, aborted transaction.
Dependencies
Consistency models and phenomena are often defined in terms of dependencies between different operations. For example, we say that transaction T2 write-read depends on transaction T1 if T2 reads some value that T1 wrote. These dependencies form a graph. Preventing specific cycles in that graph gives rise to different consistency models.